<!DOCTYPE html>
<html lang="zh-cn">
<head>

    <meta charset="utf-8">
    <meta http-equiv="Cache-Control" content="public, max-age=7200" />
    <meta name="generator" content="Hugo 0.68.3" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=0.5, maximum-scale=2.0, user-scalable=yes" />
    <link rel="shortcut icon" href="/img/favicon.ico" >
    <title> - 我的网页测试搭建</title>
    <meta property="og:title" content=" - 我的网页测试搭建">
    <meta property="og:type" content="article">
        
        
    <meta name="description" content="">
        
    <meta name="author" content="标杆杆">
    <meta property="og:url" content="https://thaoeu.site/post/software_architecture/">

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/8.0.0/normalize.min.css" />
    
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/themes/prism-okaidia.min.css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/plugins/line-numbers/prism-line-numbers.min.css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.8.4/plugins/toolbar/prism-toolbar.min.css" />
    
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.0/animate.min.css" />
    <link rel="stylesheet" href="/css/style.css">
</head>

<body>
<header id="header" class="clearfix">
    <div class="container">
        <div class="col-group">
            <img class="wow  zoomIn slow" src="/img/favicon.ico" />
            <a href="https://thaoeu.site/"><img class="wow  zoomIn slow" src="/img/title.png" /></a>
            <div class="site-name ">
                
            </div>
            <div>
                <nav id="nav-menu" class="clearfix wow slow zoomIn">
                    <a class="current" href="https://thaoeu.site/"><i class="fa fa-home" aria-hidden="true"></i>&nbsp;文章</a>
                    
                    <a  href="https://thaoeu.site/about/" title="关于">
                        <i class="fa fa-bars" aria-hidden="true"></i>&nbsp;关于
                    </a>
                    
                </nav>
            </div>
        </div>
    </div>
</header>


<div id="body">
    <div class="container">
        <div class="col-group">

            <div class="col-8" id="main">
            
                <div class="res-cons">
                    <article class="post">
                        <header>
                            <h1 class="post-title animated slower flipInX"><i class="fa fa-file-text-o"></i>&nbsp;</h1>
                        </header>
                        <date class="post-meta meta-date animated slower fadeInUp">
                        <i class="fa fa-calendar" aria-hidden="true"></i>
                            1年1月1日
                            00:00
                            
                        </date>
                        <div class="post-meta animated slower fadeInUp">
                            | <i class="fa fa-user-o" aria-hidden="true"></i>
                            <a href="/about">标杆杆</a>
                        </div>
                        
                        <br />
                        <div class="post-meta animated slower fadeInUp">
                            <i class="fa fa-clock-o"></i>&nbsp;阅读时间6分钟
                        </div>
                        <br />
                    </article>
                    
                </div>
                
                        <div class="post-content animated slower fadeInLeftBig">
                            <article>
                            <h1 id="十二章软件体系结构">十二章软件体系结构</h1>
<hr>
<h2 id="软件体系结构概论">软件体系结构概论</h2>
<blockquote>
<p>软件设计主要针对需求分析过程中得到的软件需求规格说明，综合考虑各种制约因素，探求切实可行的软件解决方案并最终给出方案的逻辑表示，包括文档、模型等</p>
</blockquote>
<blockquote>
<p>随着软件系统规模越来越大、越来越复杂，整个系统的结构和规格说明显得越来越重要。对于大规模的复杂软件系统来说，对总体的系统结构设计和规格说明比起对计算的算法和数据结构的选择已经变得明显重要得多。对软件体系结构的系统、深入的研究将会成为提高软件生产率和解决软件维护问题的新的最有希望的途径</p>
</blockquote>
<ul>
<li>软件设计采用的方法包括：抽象与逐步求精、模块化与信息隐藏、内聚与耦合</li>
</ul>
<ol>
<li>过程抽象</li>
</ol>
<p><code>把一个特定功能的动作序列抽象为过程名，然后通过指定的过程及参数来调用过程</code></p>
<ol start="2">
<li>数据抽象</li>
</ol>
<p><code>把数据对象的第一或描述抽象为一个具体的数据类型</code></p>
<p>逐步求精是与抽象密切相关的一个概念，可视为一种自顶向下设计策略，其主要思想是，针对某个功能的宏观描述，使用逐步求精的方法不断的分解，逐步确立过程细节，直到该过程能用程序语言描述的算法实现为止</p>
<p><code>求精的每一步都是用更为详细的描述代替上一层次的抽象描述，在整个设计过程中，产生的具有不同详细程度的各种描述，组成了系统层次结构。层次结构的上一层还是下一层的抽象，下一层是上一层的求精。</code></p>
<p>模块化和信息隐藏
<code>要求每一个模块相互独立，功能相对单一，接口尽可能简单</code></p>
<p><img src="~/Pictures/CL/archite/1gocheng.png" alt=""></p>
<h3 id="软件体系结构定义">软件体系结构定义</h3>
<blockquote>
<p>软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象，由构成系统的元素的描述、这些元素的相互作用、指导元素继承的模式以及这些模式的约束组成。</p>
</blockquote>
<blockquote>
<p>软件体系结构不仅指定了系统的组织结构和拓扑结构，并且显示了系统需求和构成系统的元素之间的对应关系，提供了一些决策的基本原理。</p>
</blockquote>
<pre><code>- 软件体系结构明确了对系统实现的约束条件
- 软件体系结构决定了开发和维护组织的组织结构
- 软件体系结构制约着系统的质量属性
- 通过研究软件体系结构可预测软件的质量
- 软件体系结构使推理和控制更改更简单
- 软件体系结构有助于循序渐进的原型设计
- 软件体系结构可作为培训的基础
</code></pre><h2 id="软件体系结构风格">软件体系结构风格</h2>
<blockquote>
<p>软件体系结构风格是描述某一特定应用领域中系统组织方式的惯用模式。</p>
</blockquote>
<pre><code>强调了软件系统中通用的组织结构
针对某种软件应用场景，应该选择与其相适应的构件，以及合理安排构件间的关系。在后面的具体体系结构风格中，可以重点查看构件、连接件、结构安排的不同（这些区分了不同的风格，适用于不同的场景）
</code></pre><h3 id="经典的体系结构风格">经典的体系结构风格</h3>
<ul>
<li>数据流风格：		批处理序列；管道 / 过滤器</li>
<li>调用 / 返回风格：	主程序 / 子程序；面向对象风格；层次结构</li>
<li>独立构件风格：	进程通讯；事件系统</li>
<li>虚拟机风格：		解释器；基于规则的系统</li>
<li>仓库风格：		数据库系统；超文本系统；黑板系统</li>
</ul>
<h2 id="分布式系统体系结构">分布式系统体系结构</h2>
<blockquote>
<p>所有大型计算机系统现在都是分布式系统。与所有的系统组件在一台单独的计算机上执行的集中式系统相反，分布式系统中包括有许多台计算机，是“一个独立计算机的集合体，但给用户的感觉却是面对一个独立的系统。”由于系统组件可能运行在独立管理的计算机上以及组件间要经过网络通信，我们把这样的体系结构称为分布式系统体系结构。</p>
</blockquote>
<ul>
<li>分布式系统是建立在网络上的软件系统。正是因为软件的特性，分布式系统具有高度的内聚性和透明性。网络和分布式系统的区别更多在于高层软件（特别是操作系统），而不是硬件。</li>
<li>分布式系统与计算机网络在物理结构上是基本相同的。</li>
</ul>
<h2 id="web-服务软件体系结构">Web 服务软件体系结构</h2>
<ul>
<li>20 世纪 90 年代，网络技术的发展彻底改变了信息交流的方式，客户计算机可以通过访问其机构以外的远程服务器来获得信息。但是，这种访问是通过 Web 浏览器进行的，要想使用其他程序来对信息库进行直接访问是不实际的。也就是说，在服务器之间进行随意的连接（比如一个程序从不同的提供商查询多个目录）是不能做到的。为了解决这个问题，人们提出了 Web 服务的概念。本节先讲解 Web 服务的相关知识从而引出面向服务的体系结构的概念、进而学习服务作为可复用的组件、服务实现和部署和服务测试相关知识。</li>
</ul>
<h3 id="web-服务的协议架构">Web 服务的协议架构</h3>
<table>
<thead>
<tr>
<th>服务发布层</th>
<th>UDDI</th>
</tr>
</thead>
<tbody>
<tr>
<td>服务描述层</td>
<td>WSDL</td>
</tr>
<tr>
<td>消息传输层</td>
<td>SOAP</td>
</tr>
<tr>
<td>编码格式层</td>
<td>XML</td>
</tr>
<tr>
<td>网络传输层</td>
<td>HTTP,FTP,TCP/IP,SMTP</td>
</tr>
</tbody>
</table>
<p>表格自底向上，每一层协议都为上一层提供服务。</p>
<h3 id="web-服务体系结构的优势">WEB 服务体系结构的优势</h3>
<ol>
<li>WEB 服务的高度通用性
　</li>
</ol>
<p>Web 服务既然是一种部署在 Web 上的对象，自然具备对象的良好封装性，对于使用者而言，他能且仅能看到该对象提供的功能列表，而不必考虑 web 服务对象的内部组成，因此有易用性。Web 服务对象内封装都是一些通用功能，因此也具有高度的复用性。</p>
<ol start="2">
<li>完全的平台、语言独立性</li>
</ol>
<p>Web 服务对象具有松散耦合的特性，这一特征也是源于对象 / 组件技术，当一个 Web 服务的实现发生变更的时候，调用者是不会感到这一点的，对于调用者来说，只要 Web 服务的调用界面不变，Web 服务的实现任何变更对他们来说都是透明的</p>
<p>作为 Web 服务，其协约必须使用开放的标准协议（比如 HTTP、SMTP 等）进行描述、传输和交换。这些标准协议应该完全免费，以便由任意平台都能够实现。</p>
<ol start="3">
<li>高度可集成性</li>
</ol>
<p>　由于 Web 服务采取简单的、易理解的标准 Web 协议作为组件界面描述和协同描述规范，完全屏蔽了不同软件平台的差异，无论是 CORBA 还是 DCOM 都可以通过这一种标准的协议进行互操作，实现了在当前环境下最高的可集成性。</p>
<h2 id="其他现代体系结构">其他现代体系结构</h2>
<ol>
<li>
<p>MVC 体系结构
模型、视图和过滤器</p>
</li>
<li>
<p>网格计算软件体系结构
是伴随互联网技术发展起来的，针对复杂科学计算的新型计算模式，它利用互联网把分散在不同地理位置的计算机以及其他设备组成一个“虚拟的超级计算机”，其中每台参与计算的计算机称为一个计算机节点，整个计算是由成千上万个节点组成的一张网格来完成的，称为网格计算。</p>
</li>
<li>
<p>云计算体系结构
将各种资源以服务的形式通过网络提供给用户。
云计算资源包括</p>
</li>
</ol>
<ul>
<li>网络应用</li>
<li>应用开发、虚拟化</li>
<li>虚拟化环境下的计算和处理资源</li>
</ul>
<h2 id="体系结构的设计开发">体系结构的设计开发</h2>
<blockquote>
<p>基于体系结构的软件设计（ABSD)
基于架构的软件设计方法有三个基础：</p>
</blockquote>
<ol>
<li>功能分解
在功能分解中，ABSD 方法使用已有的基于模块的内聚和耦合技术</li>
<li>通过选择架构风格来实现质量和业务需求</li>
<li>软件模板的使用
软件模板利用了一些软件系统的结构</li>
</ol>
<h2 id="体系结构评估">体系结构评估</h2>
<blockquote>
<p>是避免软件系统灾难化的最低成本的手段</p>
</blockquote>
<h3 id="软件体系结构评估关注的属性">软件体系结构评估关注的属性</h3>
<p>1．性能
　　性能是指系统的响应能力，即要经过多长时间才能对某个事件作出响应，或者在某段时间内系统所能处理的事件的个数。经常用单位时间内所处理事务的数量或系统完成某个事务处理所需的时间来对性能进行定量的表示。性能测试经常要使用基准测试程序（用以测量性能指标的特定事务集或工作量环境）。</p>
<p>2．可靠性
　　可靠性是软件系统在应用或系统错误面前、在意外或错误使用的情况下维持软件系统的功能特性的基本能力。
可靠性可以分为两个方面：</p>
<ul>
<li>
<p><input disabled="" type="checkbox"> 容错。其目的是在错误发生时确保系统正确的行为，并进行内部“修复”。</p>
</li>
<li>
<p><input disabled="" type="checkbox"> 健壮性。其能保护应用程序不受错误使用和错误输入的影响，在遇到意外错误事件时确保应用系统处于已经定义好的状态。和容错相比，健壮性并不是在错误发生时软件可以继续运行，它只能保证软件按照某种已经定义好的方式终止执行。</p>
</li>
</ul>
<p>3．可用性
　　可用性是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。</p>
<p>4．安全性
　　安全性是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力。安全性是根据系统可能受到的安全威胁的类型来分类的。</p>
<p>5．可修改性
　　可修改性是指能够快速地以较高的性能代价比对系统进行变更的能力。通常以某些具体的变更为基准，通过考察这些变更的代价衡量可修改性。可修改性包含四个方面：</p>
<ul>
<li>可维护性</li>
<li>可扩展性</li>
<li>结构重组</li>
<li>可移植性</li>
</ul>

                            
                            <br />
                            <br />
                            <br />
                            <hr />
                            
                            
                            <a href="https://thaoeu.site/post/arch/7/">上一页&nbsp;<i class="fa fa-angle-double-up" ></i></a>&nbsp;<br /><br />
                            
                            
                            <br />
                            <br />
                            <br />
                            
                            </article>
                        </div>
                        <p class="pull-right2"><a href="/" class="fa fa-home" ></a></p>
                            <p class="pull-right"><a href="#" class="fa fa-angle-double-up" ></a></p>
                            <p class="pull-left"><a href="#" onclick="javascript:history.go(-1);return false;" class="fa fa-angle-double-left" ></a></p>
                
                        
            </div>
            <div id="secondary" class="">
    <section class="widget wow slow zoomIn">
        <form id="search" action="https://www.baidu.com/s" method="get" accept-charset="utf-8" target="_blank" _lpchecked="1" onsubmit="return buildQuery()">
      
      <input type="text" id="query" maxlength="20" placeholder="Search">
      <input type="hidden" id="wd" name="wd" value="">
      <button type="submit" class="submit icon-search"></button>
</form>


<script>
    function buildQuery(){
        var queryString= document.getElementById('query').value;
        var baseUrl = "https:\/\/thaoeu.site\/";
        
        var url = baseUrl.replace(/^(https:|http:|)\/\//, "").replace(/\/$/, "");
          
        var wdElement = document.getElementById('wd');
        wdElement.value= queryString + " site:" + url;  
        
        return true;
    }
</script>

    </section>
    <section class="widget wow slow zoomIn">
        <div class="card">
            <a href="https://github.com/thaoeu">
                <div class="card-image">
                    <img class="lazy" src="/img/thaoeu.jpg" data-original="/img/fj.jpg" />
                </div>
                <div class="card-body">
                    <div class="card-title">
                        <h3>
                            Thaoeu
                        </h3>
                    </div>
                    <div class="card-date">
                        <time>
                        </time>
                    </div>
                    
                    <div class="card-exceprt">
                        <p>
                            
                        </p>
                    </div>
                </div>
            </a>
        </div>
    </section>
    <section class="widget wow slow zoomIn">
        <div id="calendar" class="calendar"></div>
    </section>
    <section class="widget wow slow zoomIn">
        <h3 class="widget-title" ><i class="fa fa-folder-o"></i>&nbsp;分类</h3>
        <ul class="widget-list">
            
        </ul>
    </section>
    <section class="widget wow slow zoomIn">
        <h3 class="widget-title"><i class="fa fa-calendar-check-o"></i>&nbsp;归档</h3>
        <ul class="widget-list">
            
            <li class="fa fa-angle-right">
                <a href="/tags/c">c (1)</a>
            </li><br />
            
            <li class="fa fa-angle-right">
                <a href="/tags/git">git (1)</a>
            </li><br />
            
            <li class="fa fa-angle-right">
                <a href="/tags/linux">linux (6)</a>
            </li><br />
            
            <li class="fa fa-angle-right">
                <a href="/tags/markdown">markdown (1)</a>
            </li><br />
            
            <li class="fa fa-angle-right">
                <a href="/tags/other">other (4)</a>
            </li><br />
            
            <li class="fa fa-angle-right">
                <a href="/tags/vim">vim (2)</a>
            </li><br />
            
            <li class="fa fa-angle-right">
                <a href="/tags/wm">wm (1)</a>
            </li><br />
            
        </ul>
    </section>
    

    <section class="widget wow slow zoomIn">
        <h3 class="widget-title"><i class="fa fa-file-o"></i>&nbsp;其它</h3>
        <ul class="widget-list">
            <li class="fa fa-angle-right"><a href="/index.xml">&nbsp;本站RSS</a></li>
        </ul><br />
    </section>
</div>

        </div>
    </div>
</div>
<footer id="footer">
    <div class="container" style="text-align:center">
        &copy; 2020 <a href="https://thaoeu.site/">我的网页测试搭建 By 标杆杆</a>.

        
    </div>

    
    <div class="container" style="text-align:center">
    <a rel="nofollow noreferer noopener" href="http://www.beian.miit.gov.cn/" target="_blank">黑ICP备19007841号-2</a>.
    </div>
    
</footer>


    <script type="text/javascript">
    
    (function(){
        $("pre code").parent().addClass("line-numbers")
    }())

    window.MathJax = {
        tex2jax: {
            inlineMath: [ ['$','$'] ],
            processEscapes: true
        }
    };
    </script>
    <script type="text/javascript" src="/js/prism.js" async="true"></script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>

<a id="rocket" href="#top"></a>
<script type="text/javascript" src="/js/totop.js?v=0.0.0" async=""></script>







</body>
</html>